﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


//给你一个非负整数数组 nums ，你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。

//判断你是否能够到达最后一个下标，如果可以，返回 true ；否则，返回 false
//想法，判断当前的位置是否可以到达，
//但是到达当前位置，不一定是前一个过来的

//题解思路，和前面的没有关系，看能不不能覆盖到后面的
class Sol55
{
  public  bool CanJump(int[] nums)
    {

        int max = 0;//记录最远的范围
        int end = nums.Length - 1;

        for (int i = 0; i < nums.Length; i++) {

            if (max >= i)//判断能不能到达当前位置
            {
                max =Math.Max(max, i + nums[i]);
                if (max >= end)
                {
                    return true;
                }
            }
            else
            {
                return false;
            }
      

        
        }

        return false;
    }

    


}

class Program55
{
    static void Main55(string[] args)
    {

        int[] nums = [2, 3, 1, 1, 4];

        Sol55 sol55 = new Sol55();
    bool res=    sol55.CanJump(nums);
        Console.WriteLine(res);
    }
}
